package br.com.firula.to;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name="time")
@SequenceGenerator(name="SEQUENCE", sequenceName="time_seq")
@Inheritance(strategy=InheritanceType.JOINED)
public class TimeTO extends BaseTO{

	private static final long serialVersionUID = -1317260673591859218L;

	@Id
	@Column(name="id", nullable=false)
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Long id;

	@Column(name="nomeCompleto")
	private String nomeCompleto;

	@Column(name="nomeCurto", nullable=false)
	private String nomeCurto;

	@Column(name="anoFundacao")
	private Integer anoFundacao;

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "time")
	private List<UsuarioTO> usuarios;

	@ManyToMany(fetch = FetchType.LAZY, mappedBy="times", targetEntity=ConteudistaTO.class)
	private List<ConteudistaTO> conteudistas;

	@ManyToMany(fetch = FetchType.LAZY, mappedBy="times", targetEntity=TorcidaTO.class)
	private List<TorcidaTO> torcidas;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "idModalidade", nullable = false)
	private ModalidadeTO modalidade;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "idPais", nullable = false)
	private PaisTO pais;

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "idEstado", nullable = true)
	private EstadoTO estado;

	@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name="rel_time_jogo",
        joinColumns=@JoinColumn(name="idTime", nullable = false, referencedColumnName="id"),
        inverseJoinColumns=@JoinColumn(name="idJogo", nullable = false, referencedColumnName="id"))
	private List<JogoTO> jogos;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNomeCompleto() {
		return nomeCompleto;
	}

	public void setNomeCompleto(String nomeCompleto) {
		this.nomeCompleto = nomeCompleto;
	}

	public String getNomeCurto() {
		return nomeCurto;
	}

	public void setNomeCurto(String nomeCurto) {
		this.nomeCurto = nomeCurto;
	}

	public Integer getAnoFundacao() {
		return anoFundacao;
	}

	public void setAnoFundacao(Integer anoFundacao) {
		this.anoFundacao = anoFundacao;
	}

	public List<UsuarioTO> getUsuarios() {
		return usuarios;
	}

	public void setUsuarios(List<UsuarioTO> usuarios) {
		this.usuarios = usuarios;
	}

	public List<ConteudistaTO> getConteudistas() {
		return conteudistas;
	}

	public void setConteudistas(List<ConteudistaTO> conteudistas) {
		this.conteudistas = conteudistas;
	}

	public List<TorcidaTO> getTorcidas() {
		return torcidas;
	}

	public void setTorcidas(List<TorcidaTO> torcidas) {
		this.torcidas = torcidas;
	}

	public ModalidadeTO getModalidade() {
		return modalidade;
	}

	public void setModalidade(ModalidadeTO modalidade) {
		this.modalidade = modalidade;
	}

	public PaisTO getPais() {
		return pais;
	}

	public void setPais(PaisTO pais) {
		this.pais = pais;
	}

	public EstadoTO getEstado() {
		return estado;
	}

	public void setEstado(EstadoTO estado) {
		this.estado = estado;
	}

	public List<JogoTO> getJogos() {
		return jogos;
	}

	public void setJogos(List<JogoTO> jogos) {
		this.jogos = jogos;
	}

	@Override
	public String getAbreviation() {
		// TODO Auto-generated method stub
		return null;
	}

}
